﻿using System;
using System.Collections;
using System.Linq;
using System.Text;
using System.IO;
using Microsoft.Xna.Framework.Storage;

namespace chemicall
{
    class GameManager
    {
        private static GameManager instance;

        public String fichier;
        public string nameUser;
        public bool[] tNiveau;
        public int[] tScore;
        public bool[] tAtome;

        public static GameManager getInstance()
        {
            if (instance == null)
                instance = new GameManager();
            return instance;
        }

        private GameManager()
        {
            nameUser = null;
            tNiveau = new bool[CONSTANTES.GAMEMANAGER_NOMBRE_NIVEAUX];
            tScore = new int[CONSTANTES.GAMEMANAGER_NOMBRE_NIVEAUX];
            tAtome = new bool[CONSTANTES.GAMEMANAGER_NOMBRE_NIVEAUX];
        }

        public void LoadGameManager(string fichier)
        {
            try
            {
                StreamReader monStreamReader = new StreamReader(fichier);
                string ligne = monStreamReader.ReadLine();
                nameUser = ligne;

                ligne = monStreamReader.ReadLine();
                int nombreNiveaux = int.Parse(ligne);
                if (CONSTANTES.GAMEMANAGER_NOMBRE_NIVEAUX != nombreNiveaux)
                {
                    Console.Write("Le nombre de niveaux ne correspond au nombre de niveaux de la sauvegarde");
                }

                for (int i = 0; i < 3; i++)
                {
                    for (int j = 0; j < nombreNiveaux; j++)
                    {
                        ligne = monStreamReader.ReadLine();
                        switch (i)
                        {
                            case 0 :
                                tNiveau[j] = Boolean.Parse(ligne);
                                break;
                            case 1 :
                                tScore[j] = int.Parse(ligne);
                                break;
                            case 2 :
                                tAtome[j] = Boolean.Parse(ligne);
                                break;
                        }
                    }
                }
                monStreamReader.Close();
            }
            catch (Exception ex)
            {
                Console.Write("Une erreur est survenue au cours de la lecture !");
                Console.Write(ex.Message);
            } 
        }

        public void SaveGameManager(string fichier, string name)
        {
            try
            {
                StreamWriter monStreamWriter = new StreamWriter(fichier);

                monStreamWriter.WriteLine(name);
                int nombreNiveaux = CONSTANTES.GAMEMANAGER_NOMBRE_NIVEAUX;
                monStreamWriter.WriteLine(nombreNiveaux);
                for (int i = 0; i < 3; i++)
                {
                    for (int j = 0; j < nombreNiveaux; j++)
                    {
                        switch (i)
                        {
                            case 0:
                                monStreamWriter.WriteLine(tNiveau[j]);
                                break;
                            case 1:
                                monStreamWriter.WriteLine(tScore[j]);
                                break;
                            case 2:
                                monStreamWriter.WriteLine(tAtome[j]);
                                break;
                        }
                    }
                }
                monStreamWriter.Close();
            }
            catch (Exception ex)
            {
                Console.Write("Une erreur est survenue au cours de l'écriture !");
                Console.Write(ex.Message);
            }
        }

        public void EraseGameManager(string fichier)
        {
            try
            {
                StreamWriter monStreamWriter = new StreamWriter(fichier, false);
                nameUser = "New";
                monStreamWriter.WriteLine(nameUser);
                for (int i = 0; i < 3; i++)
                {
                    for (int j = 0; j < CONSTANTES.GAMEMANAGER_NOMBRE_NIVEAUX; j++)
                    {
                        switch (i)
                        {
                            case 0:
                                tNiveau[j] = false;
                                break;
                            case 1:
                                tScore[j] = 0;
                                break;
                            case 2:
                                tAtome[j] = false;
                                break;
                        }
                    }
                }
                monStreamWriter.Close();
            }
            catch (Exception ex)
            {
                Console.Write("Une erreur est survenue lors de l'effacement de la sauvegarde !");
                Console.Write(ex.Message);
            } 
        }

        public void SaveLevel(int numeroNiveau, bool niveau, int score, bool atome)
        {
            if (numeroNiveau > CONSTANTES.GAMEMANAGER_NOMBRE_NIVEAUX)
            {
                Console.Write("Ce niveau n'existe pas");
            }
            else
            {
                if (!tNiveau[numeroNiveau - 1]) 
                    tNiveau[numeroNiveau - 1] = niveau ;
                if (tScore[numeroNiveau - 1] < score)
                    tScore[numeroNiveau - 1] = score;
                if (!tAtome[numeroNiveau - 1])
                    tAtome[numeroNiveau - 1] = atome;
            }
        }        

        public string LoadNameSave(string fichier)
        {
            string nameUser = "";
            try
            {
                StreamReader monStreamReader = new StreamReader(fichier);
                string ligne = monStreamReader.ReadLine();
                nameUser = ligne;
                monStreamReader.Close();
            }
            catch (Exception ex)
            {
                Console.Write("Une erreur est survenue au cours de la lecture !");
                Console.Write(ex.Message);
            }
            return nameUser;
        }


    }
}
